Elastic Search进阶

ES是什么

一个基于Lucene的开源的、实时分布式搜索和分析引擎,他可以用于全文搜索、结构化搜索和分析以及将三者混合使用。在搜索方面非常优秀,又快又准,还能根据相关性返回、搜索纠错等。

它使用了RESTful API的语法风格,所以使用它也非常简单易上手。提供了kibanaWeb应用程序实现可视化界面,让开发人员及管理者更加方便地查看及管理自己的页面。不过多研究如何使用,需要时翻开API手册即可。

ES的倒排索引是啥

一般我们说的检索是正排索引,即通过文章,逐个遍历找到对应关键词的位置。倒排索引是通过分词策略,形成词和文章的映射关系表,即从词出发,记载词在哪些文档中出现,最后形成的词典+映射表即为倒排索引。

因为倒排索引的底层实现是基于FST数据结构,可以实现O(1)时间复杂度的效率检索文章,极大提高了检索效率!

ES的更新和删除文档的过程

因为ES里面的文档是不可变的,所以不能被删除或者更改。

如果需要更新已存在的文档,可以通过重建索引或者替换掉它。如果是这样,文档的_version将增加。在内部,ES标记旧文档为删除并添加一个完整的新文档。旧文档不会立刻消失,但是我们不能访问到,尽管该文档依然能被匹配查询,但是会在结果中被过滤掉。ES在我们继续索引更多数据时会清理被删除的文档。

删除操作同理,删除文档后不会立刻在磁盘上移除,只是被标记成已删除,后续再后台清理掉。